(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=Fabian Filipczyk (FFJaro@gmx.de) Title=OFDb Description=Online-Filmdatenbank (OFDb) import with small picture (DE) Site=http://www.ofdb.de Language=DE Version= Requires=3.5.0 Comments= License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. | GetInfo=1 [Options] ***************************************************) program OFDB_DE; var MovieName: string; function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(Pattern, List.GetString(i)) <> 0 then begin result := i; Break; end; end; /////////////////////////////////////////////////////////////////// procedure AnalyzePage(Address: string); var Page: TStringList; LineNr: Integer; begin Page := TStringList.Create; Page.Text := GetPage(Address); // if pos('OFDb - Suchergebnis', Page.Text) = 0 then if pos('<title>OFDb - Übersicht der Filmdaten', Page.Text) > 0 then begin SetField(fieldURL, Address); AnalyzeMoviePage(Page) end else begin PickTreeClear; LineNr := FindLine('Titel:', Page, 0); if LineNr > 0 then begin PickTreeAdd('Filme :', ''); AddMoviesTitles(Page, LineNr); if PickTreeExec(Address) then AnalyzePage(Address); end; end; Page.Free; end; procedure AnalyzeMoviePage(Page: TStringList); var TomString, Line, Temp, Value: string; LineNr, IntValue: Integer; BeginPos, EndPos: Integer; begin // Picture //LineNr := FindLine('http://www.hsi-infopool.de/zensur/movies/images/film', Page, 0); //http://www.ofdb.de/ //http://www.ofdb.de/images/film/0/179.jpg //images/film/0/179.jpg LineNr := FindLine('images/film/', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos('', Line) + 17; EndPos := pos('', Line); Value := copy(Line, BeginPos, EndPos - BeginPos); SetField(fieldOriginalTitle, Value); LineNr := Findline('sans-serif" size="3">', Page, 0); if LineNr > -1 then begin Line:= Page.GetString(LineNr); BeginPos := pos('sans-serif" size="3">',Line) +24; Endpos := pos('',Line); Value := copy(Line,BeginPos, Endpos-Beginpos); SetField(fieldTranslatedTitle,Value); end; end; //Country LineNr := Findline('Herstellungsland:', Page, 0); if LineNr > -1 then begin LineNr := LineNr+3; Line:= Page.GetString(LineNr); Delete(Line, 1, pos('',Line) +2; Endpos := pos('
',Line); Value := copy(Line,BeginPos, Endpos-Beginpos); SetField(fieldCountry, Value); end; // Year LineNr := Findline('Erscheinungsjahr:', Page, 0); if LineNr > -1 then begin LineNr := LineNr+3; Line:= Page.GetString(LineNr); Delete(Line, 1, pos('',Line) +2; Endpos := pos('
',Line); Value := copy(Line,BeginPos, Endpos-Beginpos); SetField(fieldYear, Value); end; // Category LineNr := Findline('Genre(s):', Page, 0); if LineNr > -1 then begin Value:= ''; LineNr := LineNr+2; Line:= Page.GetString(LineNr); repeat Delete(Line, 1, pos('', Line); if BeginPos > 0 then begin Delete(Line, 1, BeginPos +1 ); Temp := copy(Line, 1, pos('
', Line)-1 ); Value:= Value+', '+ Temp ; end; until (BeginPos < 1); Value:= copy(Value, 3,length(Value)-1); SetField(fieldCategory, Value); end; // Actors LineNr := Findline('Darsteller', Page, 0); if LineNr > -1 then begin LineNr := LineNr+3; Line:= Page.GetString(LineNr); if pos('[mehr]', Line) > 0 then begin BeginPos := pos('[mehr]',Line); Value := copy(Line,BeginPos, Endpos-Beginpos); GetActors(Value); end else begin Value:= ''; repeat Delete(Line, 1, pos('', Line); if BeginPos > 0 then begin Delete(Line, 1, BeginPos +1 ); Temp := copy(Line, 1, pos('
', Line)-1 ); Value:= Value+', '+ Temp ; end; until (BeginPos < 1); Value:= copy(Value, 3,length(Value)-1); SetField(fieldActors, Value); end; end; //Director LineNr := Findline('Regie', Page, 0); if LineNr > -1 then begin Value:= ''; LineNr := LineNr+3; Line:= Page.GetString(LineNr); repeat Delete(Line, 1, pos('', Line); if BeginPos > 0 then begin Delete(Line, 1, BeginPos +1 ); Temp := copy(Line, 1, pos('
', Line)-1 ); Value:= Value+', '+ Temp ; end; until (BeginPos < 1); Value:= copy(Value, 3,length(Value)-1); SetField(fieldDirector, Value); end; //Description LineNr := Findline('Inhalt:', Page, 0); if LineNr > -1 then begin LineNr:=Findline('[mehr]', Line); Value:=copy(Line, BeginPos, EndPos - BeginPos); GetDescriptions(Value); end; //Rating LineNr := Findline('
Note:', Page, 0); if LineNr > -1 then begin Line:= Page.GetString(LineNr); BeginPos := pos('
Note:',Line) +10; EndPos:= pos('  ',Line); Value := copy(Line,BeginPos, Endpos-Beginpos); Value := IntToStr(Round(StrToInt(StrGet(Line, BeginPos), 0) + (StrToInt(StrGet(Line, BeginPos +3), 0) /10))); SetField(fieldRating,Value ); end; //DisplayResults; end; procedure GetActors(Address: string); var Line,Temp, Value: string; LineNr: Integer; BeginPos, EndPos: Integer; Page: TStringList; begin Page := TStringList.Create; Page.Text := GetPage('http://www.ofdb.de/'+Address); LineNr := Findline('Darsteller', Page, 0); if LineNr > -1 then begin Value:= ''; LineNr := LineNr+3; Line:= Page.GetString(LineNr); repeat Delete(Line, 1, pos('', Line); if BeginPos > 0 then begin Delete(Line, 1, BeginPos +1 ); Temp := copy(Line, 1, pos('

', Line)-1 ); Value:= Value+', '+ Temp ; end; until (BeginPos < 1); Value:= copy(Value, 3,length(Value)-1); SetField(fieldActors, Value); end; Page.Free; end; procedure GetDescriptions(Address: string); var Line, Temp,Value: string; LineNr: Integer; BeginPos, EndPos: Integer; Page: TStringList; begin Temp:= ''; Page := TStringList.Create; Page.Text := GetPage('http://www.ofdb.de/' + Address); LineNr := FindLine('Eine Inhaltsangabe von', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos('


', Line) + 16; while (pos('
', Line) >0) do begin EndPos := pos('
', Line); Temp := Temp + copy(Line, BeginPos, EndPos - BeginPos); LineNr:=LineNr+1; Line:=Page.GetString(LineNr); BeginPos:=1; end; EndPos := pos('

', Line); Temp:= Temp + copy(Line, BeginPos, EndPos - BeginPos); Value:= Temp; SetField(fieldDescription, Value); end; Page.Free; end; procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer); var Line: string; MovieTitle, MovieAddress: string; StartPos, EndPos: Integer; begin Line := Page.GetString(LineNr); repeat StartPos := pos(' 0 then begin Delete(Line, 1, StartPos + 8); MovieAddress := copy(Line, 1, pos('''>', Line) - 1); StartPos := pos('''>', Line) +2; MovieTitle := copy(Line, StartPos, pos('', Line) - StartPos); HTMLRemoveTags(MovieTitle); PickTreeAdd(MovieTitle , 'http://www.ofdb.de/' + MovieAddress); end; until (StartPos < 1); end; begin if CheckVersion(3,5,0) then begin MovieName := GetField(fieldOriginalTitle); if MovieName = '' then MovieName := GetField(fieldTranslatedTitle); if Input('OFDb', 'Bitte Titel eingeben :', MovieName) then begin AnalyzePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All'); end; end else ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)'); end.